package corestruct

import (
	"core/class"
	"core/selfreg"
	"reflect"
)

type IdModel struct {
	Id int64 `json:"id,string"                         gorm:"column:id;primaryKey;comment:主键;autoIncrement:false;"`
}

func (p *IdModel) GetId() int64 {
	return p.Id
}
func (p *IdModel) SetId(v int64) {
	p.Id = v
}

/**
*注册类型
 */
func init() {
	var mcls = &IdModel{}
	var m = &class.MyClass{
		Name:     "IdModel",
		Ename:    "",
		FullName: "",
		Memo:     "",
		Fileds:   nil,
		PrjName:  "",
		Type:     reflect.TypeOf(mcls),
	}
	selfreg.AddDto(m)
}

/*
column	column db name
type	column data type, 首选使用兼容的通用型, e.g: bool, int, uint, float, string, time, bytes, 对所有数据库都适用, 可以和其他标签(tag)一起使用, like not null, size, autoIncrement… specified database data type like varbinary(8) also supported, when using specified database data type, it needs to be a full database data type, for example: MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT
serializer	specifies serializer for how to serialize and deserialize data into db, e.g: serializer:json/gob/unixtime
size	specifies column data size/length, e.g: size:256
primaryKey	specifies column as primary key
unique	specifies column as unique
default	specifies column default value
precision	specifies column precision
scale	specifies column scale
not null	specifies column as NOT NULL
autoIncrement	specifies column auto incrementable
autoIncrementIncrement	auto increment step, 控制连续列值之间的间隔
embedded	embed the field
embeddedPrefix	column name prefix for embedded fields
autoCreateTime	track current time when creating, for int fields, it will track unix seconds, use value nano/milli to track unix nano/milli seconds, e.g: autoCreateTime:nano
autoUpdateTime	track current time when creating/updating, for int fields, it will track unix seconds, use value nano/milli to track unix nano/milli seconds, e.g: autoUpdateTime:milli
index	create index with options, use same name for multiple fields creates composite indexes, refer Indexes for details
uniqueIndex	same as index, but create uniqued index
check	creates check constraint, eg: check:age > 13, refer Constraints
<-	set field’s write permission, <-:create create-only field, <-:update update-only field, <-:false no write permission, <- create and update permission
->	set field’s read permission, ->:false no read permission
-	ignore this field, - no read/write permission, -:migration no migrate permission, -:all no read/write/migrate permission
comment	add comment for field when migration


column
//指定 db 列名
​
type
//列数据类型，推荐使用兼容性好的通用类型，例如：所有数据库都支持 bool、int、uint、float、string、time、bytes 并且可以和其他标签一起使用，例如：not null、size, autoIncrement… 像 varbinary(8) 这样指定数据库数据类型也是支持的。在使用指定数据库数据类型时，它需要是完整的数据库数据类型，如：MEDIUMINT UNSIGNED not NULL AUTO_INSTREMENT
​
​
size
//指定列大小，例如：size:256
​
​
primaryKey
//指定列为主键
​
​
unique
//指定列为唯一
​
​
default
//指定列的默认值
​
​
precision
//指定列的精度
​
​
scale
//指定列大小
​
​
not null
//指定列为 NOT NULL
​
​
autoIncrement
//指定列为自动增长
​
​
embedded
//嵌套字段
​
​
embeddedPrefix
//嵌入字段的列名前缀
​
​
autoCreateTime
//创建时追踪当前时间，对于 int 字段，它会追踪时间戳秒数，您可以使用 nano/milli 来追踪纳秒、毫秒时间戳，例如：autoCreateTime:nano
​
​
autoUpdateTime
//创建 / 更新时追踪当前时间，对于 int 字段，它会追踪时间戳秒数，您可以使用 nano/milli 来追踪纳秒、毫秒时间戳，例如：autoUpdateTime:milli
​
​
index
//根据参数创建索引，多个字段使用相同的名称则创建复合索引，查看 索引 获取详情
​
​
uniqueIndex
//与 index 相同，但创建的是唯一索引
​
​
check
//创建检查约束，例如 check:age > 13，查看 约束 获取详情
​
​
<-
//设置字段写入的权限， <-:create 只创建、<-:update 只更新、<-:false 无写入权限、<- 创建和更新权限
​
​
->
//设置字段读的权限，->:false 无读权限
​
-
//忽略该字段，- 无读写权限
*/
